package com.xd.alibabanacosresttemplateserver;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.client.RestTemplate;

/**
 * ribbon方式消费请求路径
 */
@RestController
@EnableDiscoveryClient
@SpringBootApplication
public class AlibabaNacosResttemplateServerApplication {

    public static void main(String[] args) {
        SpringApplication.run(AlibabaNacosResttemplateServerApplication.class, args);
    }

    /**
     * 使用RestTemplate
     * 两种调用方法 一种是服务id（要开启负载均衡）一个是域名（不用开启负载均衡）
     * 实例化RestTemplate
     *@LoadBalanaced 这个注解对于学过SpringCloud的朋友是熟悉的，该注解开启RestTemplate使用Ribbon来做负载均衡
     * @return
     */
    @Bean
    @LoadBalanced
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }

    @Autowired
    private RestTemplate restTemplate;



    @GetMapping("/testOne")
    public String testOne() {
        // 使用域名时 将@LoadBalanced注解注释 -> 自己实现 ip:端口号/调用连接
        String result = restTemplate.getForObject("http://localhost:8080/echo/lhd", String.class);
        return "Return : " + result;
    }


    /**
     * 我们在调用服务时是通过服务名的方式来进行指定路径请求
     * Ribbon会自动根据provider-service服务名去Nacos Server拉取所有健康的服务列表
     * 根据负载的策略来获取一个具体服务的ip + port再进行访问
     * @return
     */
    @GetMapping("/testTwo")
    public String testTwo() {
        // 使用负载均衡
        String result = restTemplate.getForObject("http://provider-service/echo/lhd", String.class);
        return "Return : " + result;
    }


}

